查看原文
其他

没事别想不开去编程

明白 多元思维Hack 2020-10-06

今天「又」遇到一个朋友,说想学编程,问我该怎么学习。

首先声明,我不是编程大牛,虽然写过几年代码。朋友们来问我,可能是因为我的那个「不用写代码的爬虫课」,或者是我翻译的那本技术书籍,这两点在行外人看可能比较厉害,但我心里有数,我只是程序员队伍里很普通的一个。

一系列常规的推荐资料、网站后,我又加了一句——

我还有一个建议,除非你是要从事编程行业、或者有个明确的需求,要做一个东西出来,否则不建议学编程。现在互联网上有很多成熟的工具,可以做到编程能实现的功能。编程相比其他行业见效慢,而且新手期学会后,如果中途停止,一旦连续一周不练习,你就会忘得和没学之前一样。

他说觉得有道理。

又问,“如果我要开发一个脚本,用来执行重复的操作,解放双手,我要学什么”?

看到这个问题,我大概了解了,朋友是个没学过编程,但是心里对编程盲目崇拜的人。想着学一个叫 「编程」的东西,写一个叫「脚本」的东西后,做其他事情时点一下鼠标,然后电脑就自动完成。

「执行重复的操作」,这句话没问题,这就是编程的功能性定义。

但是,这句话如果不放在具体场景里,单独拿出来讲,就是成功学。

我问他,「你想重复执行什么」,他半天没吱声,然后说——「重复执行,像爬虫爬信息,这个我学了点」。

哦,忘了说,他正在学我的「不用写代码的爬虫课」。

你看,他都说不清楚自己要 「重复执行」 些什么,只是觉得这样很酷~~~

「重复执行」看着挺简单,其实很复杂。简单来说需要三个步骤 1 输入、2 处理、3 输出。

举一个 「重复执行」的简单例子:每天抓取你关注的公众号列表文章,分析他们的阅读数、评论数,得到最优的那个,然后邮件通知。(这里的简单,是因为多个朋友问过我这个「简单」的问题)

这个过程需要的三个步骤:

  1. 输入:你所关注的各个公众号文章阅读、评论、点赞数

  2. 处理:分析阅读、评论、点赞数等指标,得到最优的那个

  3. 输出:发送邮件

1、输入
你要处理什么东西,这些信息从哪里来,怎么来,以什么形式交付给第 2 步的处理。

这里的输入就是你关注的 所有公众号文章指标

这部分内容怎么得到呢?—— 简单啊,用爬虫抓。

等等,假设,你就关注了一个叫「笑话」的公众号,这个简单,直接把 「笑话」这两个字交给爬虫就好了。

万一你哪天又多关注了一个「小说」,怎么办,把「小说」这两个字丢给爬虫就好了?怎么丢?改代码?难道每次更新公众号都要改代码?

当然你可以选一个便捷的方式,将公众号名字都放到一个文件里面,爬虫每次都从文件里面读取公众号名字。如果你更新了关注公众号,就只需要修改文件。

更简单一点,你把自己的ID交给爬虫,他自动抓取你所有的公众号。(其实这点更难,暂不赘述)

公众号名字交给爬虫,他抓取完成后,给第二步处理。


上面获取输入(公众号文章指标)的过程,是爬虫处理的,其实也需要执行内部的 输入处理输出(拿到公众号名字,抓取,将结果保存) 三个步骤,将输出的结果交给下面外部第二步的处理。

这块其实还有一些其他工作,爬虫抓取完成后的数据,以什么形式给第二步。可能是保存到一个文件里面,也可能是保存到数据库里面,或者极端点,直接放到缓存里面。

2、处理

有了输入数据,你要怎么处理?

有了文章的阅读数、评论数等,你需要根据第一步保存数据的方式,做相应处理:如果保存在数据库里面,你调用下相应的函数,按照自己的需要处理一下(或取单个最大值,或取综合最大值,或其他)。

这是最简单的处理方式。如果数据保存在文件中,就是其他的处理方面。

有人还说,我想让他根据我的选择,每天智能推荐给我感兴趣的信息。

智能推荐?这又是计算机的另一个大的领域,机器学习。你需要学习更多的知识。

这只是一些简单的处理方式,如果你的数据,还需要和外界交互,你还要写更多代码处理。

处理完以后,你也要将处理后的数据,交给第三步的输出,以什么形式呢?还是要看需求,可以参考上一步。

3、输出

简单来说,就是以什么形式展示你想要的信息?

刚刚说的是,以邮件的方式,这简单,你需要调用发送邮件的函数就行。当然你还需要配置一堆邮件参数。

如果你是其他需求,需要在网页上展示,你需要学一个 web 框架,html、css 要学,你还要适配 pc 版,移动版等等。

如果你要展示在小程序,那你还要学习小程序的各种组件等。


以上是一个「个人视角」的应用举例。而往往这类应用的适用范围不大,因为反馈方只有自己。

如果要从「用户视角」做一个应用,输入处理输出三个方面就不一样(更复杂)了。

比如第一步,你如何拿到用户的公众号名字,这个需要用户输入,怎么输入呢?总不能用户写到一个文件里面,用QQ发送给你,或者给你发一个云盘链接吧。

要做到自动化重复执行,常规的做法就是提供一个网站,有表格让用户输入,用户输入数据,程序拿到后,开始调用爬虫处理,处理完后,返回给用户。如何返回,可能是一个网页,也可能是一个下载pdf的链接,这都取决于你的需求。

可能你已经有点蒙,对,编程就是重复执行一些嵌套的「输入处理输出」操作,需要你根据自己的需求选择合适的方案。


上面写了这么多,其实就是说,如果你真的心里有种强烈的欲望,想要做某个具体的东西(最好能赚钱,单纯学习反馈太差,大概率会放弃),而且市场上没有相关工具,那你去学吧。

如果你就是单纯被外界影响,想学习「编程」,想解放自己的双手,将自己每天「重复执行」的事情交给编程,那千万别学了,「重复执行」这句话是传销,别被骗了。

如果你想说,我要学习一下技术思维等。那就更没必要了。没什么技术思维,编程的逻辑就 3 个:顺序、分支、循环。完了,再有的话,就是这三个相互嵌套。再有的话,就是程序员编程遇到 bug 多了,踩坑多了,被老板骂多了,养成了编程前,将所有意外情况都考虑到的习惯。

顺序:早上起来,先刷牙,后吃饭。有先后顺序。
分支:如果。。。就。。。否则。。。——一个妻子对做电脑程序员的丈夫说,下班后买一斤苹果,如果看到西瓜,买一个,结果丈夫买了一个苹果。
循环:今天需要吃饭上班睡觉,明天需要吃饭上班睡觉,后天需要吃饭上班睡觉……

这些在其他地方都可以学习到,只是在编程的环境里面,条件更苛刻一点,稍微有一点微小的错误,计算机就报错。这也就是你发现程序员有时候会「轴」一点。

做什么

互联网上的工具举例:
学爬虫,可以用webscraper插件,免费,跨平台,静态动态页面都能抓。
做网站,可以用WordPress,阿里云都有详细教程,对seo也很友好,还有各种插件辅助。
微信批量加好友,有wetool,免费(没用过)
……

以我个人不成熟的经验来看,如果你想实现某个功能,而你不知道有没有这个工具,99%是因为你信息源有问题,这个时候,你可能需要向朋友询问,或者加一些互联网相关的知识星球、微信群等。信息爆炸的社会,优质的信息源能极大提高你的人生效率。当然可能有些工具涉及到利益,需要付费,千万不要省这点钱。

不要重复造轮子,要相信,在你之前,已经有编程大牛将这块的功能打磨好了,你重新做性价比会差很多。

如果,如果,如果,你真的尝试了所有的渠道,没有得到结果。那先小小的恭喜你,你可能挖掘到了一个需求。

接下来去调研一下,这个需求有多少人感兴趣。

如何调研——朋友圈发问卷、微信指数、百度指数、微博指数,知乎话题。调研的关键字不一定固定,要学会相关性,比如我做webscraper,我不能就只搜大家对webscraper的兴趣,我要搜索爬虫、或者抓取数据、或者采集,数据分析等等。

我这里还有一个小窍门,写一篇文章,就说你已经实现了这个功能,文章里面详细说明(吹嘘)这个功能的作用,能达到什么效果。如果文章传播量相比之前要好很多(10倍+),用户留言、转发量都不错,那说明这个需求有市场。

Dropbox的创始人当年就是这样,在还没有产品的时候,只是制作了一个视频,描述了产品的功能,结果视频大火,很多用户都评论追问哪里可以下载等。接下来的事情就很顺利了,找合作伙伴时,如果有人质疑这个想法是否靠谱,他就拿出视频说,我们已经有几百万用户了,接下来的事情就很顺利。

这些都是增长黑客里面尝试 MVP 的不同方法,大家根据自己的实际情况,擅长哪块就从哪块入手。

上面的各种操作结合下来,如果确实有不少人感兴趣,真的要恭喜你了,你找到一个大家都感兴趣,而且市面上没有工具满足类似的需求。接下来,你就安心学编程开发吧(或者找人合作),如果做出来了,很可能还能为你增加一笔财富。

如何开始

前几天在增长黑盒的专家群里,我们也聊了如果学习编程这个问题,新榜的数据分析大神张佳说了他学习编程的一些感悟——

看书做题没啥用,直接上项目

一句话道破了新手学编程的门道。

而现在,你的项目已经有了,就是你上面调研过的那个需求。

然后需要选一门编程语言,按我不成熟的经验,python、PHP、go、java等都可以。如果非要我推荐一个,建议选 python,基础知识 2 个小时就能学完。(嗯,只是学完,后面你需要在做项目的过程中不断练习)

然后就开始做项目,啥?不知道怎么开始?——百度(Google)。

如果你要做个网站,就搜“ python 如何做个网站?/python如何做爬虫”,有人好告诉你要先去选一个web框架/爬虫框架,然后一步步按照教程走。遇到问题,还是百度(Google),你遇到的问题,别人一定遇到过。

如果是其他业务,就搜相应的关键字,还是上面的步骤走。

编程本就不是件一撮而就的事情,开始一个逗号、一个引号的错误,就可能花费你几个钟头时间。这很正常,因为你对编程不熟悉,多犯几次错就有了经验。慢慢的,再遇到问题时,你的思考方式会被训练的有逻辑,解决问题也会逐渐得心应手。

一开始,你显得很笨拙,重复刻意练习几次,熟能生巧,就会变得熟练。这是学习一个新领域的必经之路。有挫败感是正常的,这是每个人都会遇到的,不要因此而怀疑自己「没有天赋,不适合编程」等。

熟能生巧适用于每一个知识领域,熟,就是多,多练习。多到什么程度,才能到巧?这个因人而异,可能你之前的知识积累会对你学习这个领域有帮助,也可能完全推翻重来。从长远的角度来看,对你都有益处。

这个过程难吗?难!真的很难!可能你一次两次遇到问题,就已经耗尽了所有的心力,放弃了。可正因为有难度,所有门槛更高,价值也越大。付出的越多,收获的越多,这个道理哪里都适用。


好了,如果你是新手想学编程,看了上面,应该心里有答案了。

还有,我可能说的都是错的,自己做判断

如果你有其他疑问,可以留言,一起讨论。

如果你有朋友也有类似疑惑,欢迎分享给他们,多个思考方向,不是件坏事。


延伸阅读:

  1.  1 个方法,让你 100% 赚回知识星球门票

  2. 这三个原则你不知道,在互联网上就只能被骗

  3. 不用写代码,30 秒抓取李笑来所有微博

  4. 推荐几个知识星球


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存